home *** CD-ROM | disk | FTP | other *** search
/ 64'er Special 83 / 64er_Magazin_Sonderheft_83_19xx_Markt__Technik_de_Side_A.d64 / ultramenue maker (.txt) < prev    next >
Commodore BASIC  |  2022-10-26  |  9KB  |  232 lines

  1. 1000 rem ***
  2. 1010 rem *** ultraboot menue maker ***
  3. 1020 rem *** 1992 martin pfost
  4. 1030 rem *** (c) 1992 heureka software
  5. 1040 rem ***
  6. 1050 poke 53280,14:poke 53281,14
  7. 1060 poke 56,49:poke 55,255:clr
  8. 1070 print "[147] *** [213]ltraboot [205]enue [205]aker ***"
  9. 1080 print "*  1992 [205]artin [208]fost"
  10. 1090 print "* (c) 1992 [200]eureka [212]eachware"
  11. 1100 print " *** maximale [194]lockanzahl : 104"
  12. 1110 print "[213]ltraboot [205]enue [205]aker erstellt auf"
  13. 1120 print "[196]iskette ein [198]ile, das mit dem modifi-"
  14. 1130 print "zierten [213]ltraboot [205]aker auf die [218]iel-"
  15. 1140 print "diskette zu schreiben ist ."
  16. 1150 print " *** [196]ie [204]oad,[211]ave,[196]ir-[210]outinen werden"
  17. 1160 print "     gelesen ."
  18. 1170 c=0:for i=52992 to 53109:read d:poke i,d:c=c+d:next:if c=18731 then 1190
  19. 1180 print "??? [198]ehler in [196]ata-[218]eilen !":stop
  20. 1190 print " *** [196]ie [213]ltraboot-[205]enue-[196]aten werden"
  21. 1200 print "     gelesen ."
  22. 1210 c=0:for i=12800 to 13506:read d:poke i,d:c=c+d:next:if c<>70818 then 1180
  23. 1220 rem *** eingabe der filenamen
  24. 1230 clr:ad=13507:dim m%(5,20),zt%(9,9),sb(9),sa%(9,9),n$(9)
  25. 1240 print "[147] *** [199]eben [211]ie jetzt die entsprechen-"
  26. 1250 print "     [198]iles ein ! ($=[196]ir. [210]et=[197]nde)"
  27. 1260 print "==> [198]ilename [206]r.";fz+1;" ";:a$="":input a$
  28. 1270 if a$="$" then open 1,8,0,a$:sys 52992:close 1:gosub2730:goto 1240
  29. 1280 if a$="" and fz=0 then end
  30. 1290 if a$="" then 1320
  31. 1300 fz=fz+1:n$(fz)=a$:if fz<9 then 1260
  32. 1310 rem *** kontrolle der filenamen
  33. 1320 print "[147]":gosub 2700
  34. 1330 input "==> [207]k (j/n) ";a$:if a$<>"j" then 1230
  35. 1340 print "[147] *** [199]eben [211]ie jetzt ein, wie die [198]iles"
  36. 1350 print "     gestartet werden ."
  37. 1360 print "       s : [211]ys"
  38. 1370 print "       r : [210]un"
  39. 1380 print "       t : [212]ool-[198]ile"
  40. 1390 for i=1 to fz
  41. 1400 print "[198]ile";i;" : ";n$(i):input "==> [211]tartbefehl (s/r/t) ";a$
  42. 1410 sb(i)=680:if a$="s" then input "==> [193]dresse ";sb(i)
  43. 1420 if a$="t" then sb(i)=168
  44. 1430 next i
  45. 1440 print "[147]":for i=1 to fz
  46. 1450 print "[198]ile";i;" : ";n$(i);tab(28);
  47. 1460 if sb(i)=680 then print "[210]un":goto 1490
  48. 1470 if sb(i)=168 then print "[212]ool-[198]ile":goto 1490
  49. 1480 print "[211]ys";sb(i)
  50. 1490 next i
  51. 1500 input "==> [207]k (j/n) ";a$:if a$<>"j" then 1340
  52. 1510 rem *** eingabe der saetze
  53. 1520 sz=0
  54. 1530 print "[147] *** [199]eben [211]ie jetzt ein, welches [198]ile"
  55. 1540 print "     enthalten sein soll ! ([210]et=[197]nde)"
  56. 1550 print "     [211]atz :";sz+1;"":gosub 2700:i=0
  57. 1560 print "==>";i+1;". [206]ummer ";:a$="":input a$
  58. 1570 if a$="" then 1600
  59. 1580 if val(a$)=0 or val(a$)>fz then print "[145]";:goto 1560
  60. 1590 i=i+1:zt%(sz+1,i)=val(a$):if i<9 then 1560
  61. 1600 input "==> [207]k (j/n) ";a$:if a$<>"j" then 1530
  62. 1610 zt%(sz+1,0)=i:if i<>0 then sz=sz+1:if sz<9 then 1530
  63. 1620 rem *** autostartabfrage
  64. 1630 i=1
  65. 1640 if i>sz then 1720
  66. 1650 print "[147]*** [199]eben [211]ie jetzt ein, ob ein [198]ile"
  67. 1660 print "    automatisch gestartet werden soll !"
  68. 1670 print "[211]atz :";i;""
  69. 1680 for j=1 to zt%(i,0):print j;". [198]ile : ";n$(zt%(i,j))
  70. 1690 s=0:input "==> [193]utostart (j/n) ";a$:if a$="j" then s=1
  71. 1700 sa%(i,j)=s:next j:i=i+1:goto 1640
  72. 1710 rem *** satzkontrolle
  73. 1720 c=32
  74. 1730 gosub 2840:print:i=1
  75. 1740 if i>sz then 1830
  76. 1750 print "";right$(str$(i),1);"[146] ";:s=2
  77. 1760 for j=1 to zt%(i,0)
  78. 1770 d=len(n$(zt%(i,j)))+1
  79. 1780 if s+d>38 then print:print "  ";:s=2
  80. 1790 if sa%(i,j) then print "";
  81. 1800 print n$(zt%(i,j));"[146] ";:s=s+d
  82. 1810 next j:print:if c=32 then print
  83. 1820 i=i+1:goto 1740
  84. 1830 if peek(214)<23 then 1850
  85. 1840 if c=32 then c=44:goto 1730
  86. 1850 poke 13041,c:gosub 2730:gosub 2840
  87. 1860 for i=1 to fz:print "";right$(str$(i),1);"[146] ";n$(i):next i
  88. 1870 input "==> [193]lles [207]k (j/n) ";a$:if a$<>"j" then 1230
  89. 1880 rem *** ultramenue generieren
  90. 1890 print "[147] *** [213]ltramenue wird erzeugt ."
  91. 1900 of=12800-2049:for i=1 to fz:for j=1 to len(n$(i))
  92. 1910 poke ad,asc(mid$(n$(i),j,1)):ad=ad+1:next j:poke ad,0:ad=ad+1:next i
  93. 1920 e1=ad-of:for i=1 to fz:poke ad,len(n$(i))+1:ad=ad+1:next i
  94. 1930 poke ad,0:ad=ad+1:e2=ad-of:s=-1:n$(0)=""
  95. 1940 for i=0 to fz-1:s=s+len(n$(i))+1:poke ad,s:ad=ad+1:next i
  96. 1950 e3=ad-of:i=1
  97. 1960 if i>sz then 2020
  98. 1970 for j=1 to zt%(i,0):e=zt%(i,j)
  99. 1980 if sa%(i,j) then e=e+16
  100. 1990 if j=zt%(i,0) then e=e+128
  101. 2000 poke ad,e:ad=ad+1:next j
  102. 2010 i=i+1:goto 1960
  103. 2020 poke ad,0:ad=ad+1:e4=ad-of
  104. 2030 s=0:i=0:zt%(0,0)=0
  105. 2040 if i=sz then 2060
  106. 2050 s=s+zt%(i,0):poke ad,s:ad=ad+1:i=i+1:goto 2040
  107. 2060 e5=ad-of:for i=1 to fz
  108. 2070 poke ad+fz*2+i-1,sb(i)-256*int(sb(i)/256):poke ad+fz*3+i-1,int(sb(i)/256)
  109. 2080 next i:ad=ad+6*fz
  110. 2090 poke 12825,e3-256*int(e3/256):poke 12826,int(e3/256)
  111. 2100 poke 12842,peek(12825):poke 12843,peek(12826)
  112. 2110 poke 12858,e4-256*int((e4-1)/256)-1:poke 12859,int((e4-1)/256)
  113. 2120 poke 12865,e3-256*int((e3-1)/256)-1:poke 12866,int((e3-1)/256)
  114. 2130 poke 12947,e1-1-256*int((e1-1)/256):poke 12948,int((e1-1)/256)
  115. 2140 poke 13142,peek(12947):poke 13143,peek(12948)
  116. 2150 poke 13164,e2-1-256*int((e2-1)/256):poke 13165,int((e2-1)/256):e4=88-6*fz
  117. 2160 poke 13219,e4:poke 13224,e4+fz:for i=2 to 5:poke 13217+6*i,i*fz+e4:next
  118. 2170 poke 13477,6*fz-1:poke 13478,e5-256*int(e5/256):poke 13479,int(e5/256)
  119. 2180 poke 13480,e4+1
  120. 2190 rem *** files lesen
  121. 2200 open 15,8,15
  122. 2210 print " *** [196]ie [198]iles werden gelesen ."
  123. 2220 le(0)=ad-12800:gosub 2810:bl(0)=bz
  124. 2230 for i=1 to fz:print "  [198]ile";i;": ";n$(i):gosub 2720
  125. 2240 open 1,8,0,n$(i):gosub 2760:if e then close 1:goto 2240
  126. 2250 get#1,a$:if a$="" then a$=chr$(0)
  127. 2260 poke e5+of+i-1,asc(a$)
  128. 2270 get#1,a$:if a$="" then a$=chr$(0)
  129. 2280 poke e5+of+fz+i-1,asc(a$)
  130. 2290 poke 174,ad-256*int(ad/256):poke 175,int(ad/256):e1=ad:e2=bz
  131. 2300 sys 53048:close 1:ad=peek(174)+256*peek(175)
  132. 2310 le(i)=ad-e1:e1=ad:gosub 2810:bl(i)=bz-e2
  133. 2320 if bz>104 then print "??? [218]u viele [194]loecke !":stop
  134. 2330 next i
  135. 2340 rem *** bloecke berechnen
  136. 2350 print " *** [194]erechnung der [194]loecke"
  137. 2360 sd=5:gs=17
  138. 2370 if bz>84 then gs=18:sd=5
  139. 2380 if bz>89 then gs=19:sd=5
  140. 2390 if bz>94 then gs=21:sd=6
  141. 2400 t=36:s=sd+1:m%(1,0)=1:m%(1,sd+1)=1
  142. 2410 for i=0 to fz-1:for j=1 to bl(i)
  143. 2420 s=s+sd:c=gs
  144. 2430 s=s+1:if s>=gs then s=s-gs
  145. 2440 if m%(t-35,s)=0 then 2470
  146. 2450 c=c-1:if c>0 then 2430
  147. 2460 t=t+1:goto 2440
  148. 2470 m%(t-35,s)=1:next j
  149. 2480 poke e5+of+4*fz+i,t:poke e5+of+5*fz+i,s:next i
  150. 2490 rem *** datenfile erzeugen
  151. 2500 print " *** [213]ltraboot [205]enue schreiben"
  152. 2510 print "==> [199]eben [211]ie jetzt den [206]amen ein !":input "    [206]ame ";b$
  153. 2520 gosub 2720:print " *** [196]as [196]atenfile wird erzeugt ."
  154. 2530 open 2,8,2,b$+"+,s,w":gosub 2760:if e then close 2:goto 2530
  155. 2540 s=0:for i=0 to fz-1
  156. 2550 s=s+bl(i):print#2,s:print#2,abs(le(i)-1-254*int(le(i)/254)):next i
  157. 2560 print#2,999:print#2,0:close 2
  158. 2570 rem *** ultramenue schreiben
  159. 2580 print " *** [213]ltraboot [205]enue wird geschrieben ."
  160. 2590 open 1,8,1,b$:gosub 2760:if e then close 1:goto 2590
  161. 2600 print#1,chr$(1)+chr$(8);
  162. 2610 poke 174,0:poke 175,50:poke 172,e1-256*int(e1/256):poke 173,int(e1/256)
  163. 2620 sys 53073:close 1:close 15
  164. 2630 print "'";b$;"' steht auf der [196]iskette ."
  165. 2640 print "[197]s muss jetzt mit dem modifizierten"
  166. 2650 print "[213]ltraboot [205]aker auf die [218]ieldiskette"
  167. 2660 print "geschrieben werden ."
  168. 2670 input "==> [206]och ein [213]ltramenue-[198]ile (j/n) ";a$:if a$="j" then 1230
  169. 2680 end
  170. 2690 rem *** ausgabe der filenamen
  171. 2700 print "[198]iles :"
  172. 2710 for i=1 to fz:print "[198]ile [206]r.";i;" : ";n$(i):next i:print:return
  173. 2720 print "==> entsprechende [196]iskette einlegen !"
  174. 2730 get a$:if a$="" then 2730
  175. 2740 return
  176. 2750 rem *** diskstatus testen
  177. 2760 input#15,e,e$,et,es:if e=0 then return
  178. 2770 print "??? [196]isk-[198]ehler !":print e;e$;et;es
  179. 2780 input "==> [206]och einmal versuchen (j/n) ";a$:if a$="j" then return
  180. 2790 stop
  181. 2800 rem *** ad auf naechsten block
  182. 2810 by=(ad-12800)-254*int((ad-12800)/254):if by<>0 then ad=ad+254-by
  183. 2820 bz=int((ad-12800)/254):return
  184. 2830 rem *** kopfzeile schreiben
  185. 2840 print "[147]*** [213]ltraboot [205]enue ***   [205]artin [208]fost"
  186. 2850 print "      (c) 1992 [200]eureka [212]eachware":print "0[146] [198]ile [211]elect":return
  187. 2860 rem *** loadsavedirroutinen
  188. 2870 data162,1,32,198,255,32,207,255,32,207,255,169,13,32,210,255,32,207,255
  189. 2880 data133,255,32,207,255,5,255,208,3,76,204,255,32,207,255,170,32,207,255
  190. 2890 data32,205,189,169,32,32,210,255,32,207,255,240,216,32,210,255,144,246
  191. 2900 data162,1,32,198,255,160,0,32,207,255,145,174,230,174,208,2,230,175,166
  192. 2910 data144,240,241,76,204,255,198,1,162,1,32,201,255,160,0,177,174,32,210
  193. 2920 data255,230,174,208,2,230,175,165,174,197,172,208,239,165,175,197,173
  194. 2930 data208,233,230,1,76,204,255
  195. 2940 rem *** ultramenue
  196. 2950 data12,8,194,7,158,32,50,48,54,50,0,0,0,169,14,141,32,208,141,33,208
  197. 2960 data32,230,8,188,3,11,240,18,32,242,8,152,72,32,75,9,232,104,48,239,188
  198. 2970 data3,11,76,33,8,32,23,9,176,55,240,75,41,15,168,190,11,11,160,255,232
  199. 2980 data200,189,2,11,153,247,2,16,246,32,19,9,162,29,160,4,189,166,10,153
  200. 2990 data167,0,202,136,16,246,168,177,168,145,170,136,16,249,138,16,233,76
  201. 3000 data75,3,88,76,176,2,76,19,9,166,168,240,249,32,222,8,166,168,189,246
  202. 3010 data2,9,128,157,246,2,48,199,32,230,8,134,168,232,32,245,8,138,168,169
  203. 3020 data0,32,82,9,232,189,247,10,208,240,32,15,9,56,32,240,255,134,170,132
  204. 3030 data171,166,170,164,171,24,32,240,255,32,23,9,176,191,240,208,72,32,19
  205. 3040 data9,32,19,9,32,10,9,104,166,168,224,9,176,224,232,157,246,2,134,168
  206. 3050 data72,202,240,3,32,222,8,104,32,75,9,56,32,240,255,134,172,132,173,16
  207. 3060 data197,166,172,164,173,24,76,240,255,169,52,160,10,32,30,171,162,0,134
  208. 3070 data167,96,32,15,9,32,15,9,230,167,165,167,9,48,133,199,32,210,255,169
  209. 3080 data0,133,199,96,230,169,169,32,76,210,255,169,0,133,169,169,13,208,245
  210. 3090 data169,151,160,10,32,30,171,32,228,255,133,204,201,13,240,23,201,33
  211. 3100 data144,243,201,58,176,239,168,41,15,197,167,240,2,176,230,152,41,31
  212. 3110 data73,16,24,170,160,0,132,207,164,211,169,32,145,209,138,96,72,41,15
  213. 3120 data168,104,41,16,72,32,8,9,185,247,10,101,169,133,169,201,39,144,8,32
  214. 3130 data15,9,32,8,9,144,234,104,133,199,185,253,10,168,185,196,10,240,6,32
  215. 3140 data210,255,200,208,245,76,3,9,77,45,69,5,2,169,0,141,255,3,169,0,141
  216. 3150 data254,3,169,1,141,120,3,76,17,3,160,176,173,247,2,16,3,140,68,3,72
  217. 3160 data41,15,168,185,33,2,133,45,185,38,2,133,46,185,43,2,141,236,2,185
  218. 3170 data48,2,141,237,2,185,53,2,141,58,3,185,58,2,141,63,3,173,17,208,41
  219. 3180 data239,141,17,208,169,8,32,177,255,169,111,32,147,255,162,233,189,75
  220. 3190 data2,32,168,255,232,208,247,32,174,255,169,0,32,113,168,76,174,167,238
  221. 3200 data78,3,165,45,133,174,165,46,133,175,173,17,208,9,16,141,17,208,162
  222. 3210 data3,32,85,228,174,237,2,208,5,169,2,141,237,2,104,10,41,32,208,7,138
  223. 3220 data240,4,144,110,176,15,176,10,169,75,141,2,3,169,3,141,3,3,32,0,0,32
  224. 3230 data119,166,32,215,170,108,0,3,9,14,146,147,31,42,42,42,32,117,76,84
  225. 3240 data82,65,66,79,79,84,32,109,69,78,85,69,32,42,42,42,32,32,32,32,109
  226. 3250 data65,82,84,73,78,32,112,70,79,83,84,13,32,32,32,32,32,32,40,67,41,32
  227. 3260 data49,57,56,54,32,104,69,85,82,69,75,65,32,116,69,65,67,72,87,65,82
  228. 3270 data69,13,13,18,48,146,32,102,73,76,69,83,32,65,85,83,83,85,67,72,69
  229. 3280 data78,0,13,13,105,72,82,69,32,119,65,72,76,32,58,32,0,31,14,11,34,2
  230. 3290 data3,104,8,250,3,78,229,9,168,2,102,126,9,52,3,95,84,3,155,3,7,210,252
  231. 3300 data90,3
  232.